const express = require('express')
const router = express.Router()
const path = '/demo'
const Joi = require('joi')

// service.queryById(1);
router.get('/', function (req, res) {
  res.send('Hello World-demo')
})
// 接收json参数
router.post('/helloJson', function (req, res) {
  //    console.log(req.body)
  //    console.log(req.body.name)
  const schema = Joi.object({
    id: Joi.number().required().label('用户ID'), // 不能更新
    name: Joi.string().min(1).label('用户名') // 不能更新
    // passwd: Joi.string().min(6).label('密码'),
    // start_time: Joi.number().label('开始时间'),
    // expires: Joi.number().label('截至时间'),
    // comment: Joi.string().label('备注')
  })
  const { error } = schema.validate(req.body)
  if (error && error.details.length > 0) {
    res.send({
      msg: error.details[0].message
    })
  } else {
    res.json(req.body)
  }
  res.json(req.body)
})

/**
 * 路径参数
 * swagger 参数注释  id.path.required, 注意path
 * swagger 路由注释 /demo/hello/{id} ,注意这里是{大括号}
 * express 路由 /hello/:id 注意这里是 :冒号
 * 获取参数用req.params.id
 * 此方法有 JWT验证 即 security JWT
 * @route GET /demo/hello/{id}
 * @group demo - 参考样例
 * @param {integer} id.path.required - 路径参数注意path
 * @security JWT
 * @returns {object} 200 - 是否成功
 * @returns {Error}  500 - Unexpected error
 */
router.get('/hello/:id', function (req, res) {
  res.send('demo Hello World' + req.params.id)
})

/**
   * query参数
   * 即 /demo/hello1?id=xxx
   * swagger 参数注释  id.query.required,注意这里是query
   * swagger 路由注释 /demo/hello1
   * express 路由 /hello1
   * 获取参数用req.query.id，注意 query
   * @route GET /demo/hello1
   * @group demo
   * @param {string} id.query.required - query参数注意
   * @returns {object} 200 - 是否成功
   * @returns {Error}  500 - Unexpected error
   */
router.get('/hello1', function (req, res) {
  res.send('demo Hello2 World' + req.query.id)
})

/**
   * 普通formData参数
   * 即参数在body中格式为:  id=xxx&name=yyy
   * swagger 参数注释  id.formData.required,注意这里是formData
   * swagger 参数注释  name.formData.required,注意这里是formData
   * swagger 路由注释 /demo/hello2
   * express 路由 /hello2
   * 获取参数用req.body.id，注意 body
   * 获取参数用req.body.name，注意 body
   * @route POST /demo/hello2
   * @group demo
   * @param {string} id.formData.required - id
   * @param {string} name.formData.required - name
   * @returns {object} 200 - 是否成功
   * @returns {Error}  500 - Unexpected error
   */
router.post('/hello2', function (req, res) {
  // console.log(req)
  res.send('demo Hello2 World' + req.body.id)
})

/**
   * @typedef demo_User
   * @property {integer} id.required  - 用户ID - eg: 1234
   * @property {string} name.required - 用户名 - eg: user123456789
   */

/**
   * json复杂对象参数和参数的验证
   * 即参数在body中格式为json:  {id:'id1',name:'name1'}
   * swagger 参数注释  {demo_User.model } user.body.required ，注意对模型的引用demo_User.model
   * swagger 路由注释 /demo/hello3
   * swagger 返回参数注释 returns {demo_User.model} 这里也引用了模型,这里有model后缀
   * express 路由 /hello3
   * 获取参数用req.body，注意 body
   * @route POST /demo/hello3
   * @group demo
   * @param {demo_User.model} user.body.required - 用户,注意body
   * @returns {demo_User.model} 200 - 用户信息
   * @returns {Error}  500 - Unexpected error
   */
router.post('/hello3', function (req, res) {
  const schema = Joi.object({
    id: Joi.number().required().label('用户ID'), // 不能更新
    name: Joi.string().min(11).label('用户名') // 不能更新
    // passwd: Joi.string().min(6).label('密码'),
    // start_time: Joi.number().label('开始时间'),
    // expires: Joi.number().label('截至时间'),
    // comment: Joi.string().label('备注')
  })
  const { error } = schema.validate(req.body)
  if (error && error.details.length > 0) {
    res.send({
      message: error.details[0].message,
      success: false
    })
  } else {
    res.json(req.body)
  }
})

/**
   * json数组对象参数
   * 即参数在body中格式为json:  ["id1","id2"]
   * swagger 参数注释  {Array.<string>} ids.body.required ，注意类型为Array.<string>
   * swagger 路由注释 /hello4
   * express 路由 /hello4
   * 获取参数用req.body，注意 body
   * @route POST /demo/hello4
   * @group demo
   * @param {Array.<string>} ids.body.required - ids,注意body
   * @returns {demo_User.model} 200 - 用户信息
   * @returns {Error}  500 - Unexpected error
   */
router.post('/hello4', function (req, res) {
  res.status(200).json({ ...req.body, source: 'nodejs', time: new Date() })
})

/**
   * 接收 json List且返回 json List
   * 即参数在body中格式为json:  [{id:'id1',name:'name1'},{id:'id2',name:'name2'}]
   * swagger 参数注释  {Array.<demo_User> } list.body.required ，注意参数类型为Array.<demo_User>,这里没有model后缀
   * swagger 路由注释 /demo/hello5
   * swagger 返回参数注释 returns {Array.<demo_User>} 这里没有model后缀
   * express 路由 /hello5
   * 获取参数用req.body，注意 body
   * @route POST /demo/hello5
   * @group demo
   * @param   {Array.<demo_User>} list.body.required - 用户,注意body
   * @returns {Array.<demo_User>} 200 - 用户信息列表
   * @returns {Error}  500 - Unexpected error
   */
router.post('/hello5', function (req, res) {
  res.json(req.body)
})

module.exports = (app) => {
  app.use(path, router)
}
